我試圖使用自定義屬性來實現授權權限來執行方法。以下是我現在所擁有的(我剛開始的自定義屬性):自定義屬性方法級別授權
[RequiredUserPermissions(UserPermissions.CanLoginViaSite)]
internal static bool HasDesiredPermissions()
{
//Execute body here if the attribute decorated permissions exist
//for current user tracked as this._user (with permissions as
//this._user.UserPermissions (of type UserPermissions (an enum))
}
//Custom attribute class
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
internal sealed class RequiredUserPermissionsAttribute : Attribute
{
private readonly UserPermissions _requiredPermission;
public RequiredUserPermissionsAttribute(UserPermissions requiredPermission)
{ this._requiredPermission = requiredPermission; }
public UserPermissions RequiredPermissions
{ get { return _requiredPermission; } }
}
,我已經在計算器發現的最接近問題是Using an attribute to prematurely return from a method。如果我使用asp.net mvc框架,答案會非常完美,但不幸的是,我現在正在WCF服務中,並且實現整個授權層,超出了我現在通過WCF方法調用進行的簡單數據庫登錄。從時間軸角度來看,這是可行的。
我相信PostSharp可能是最好的選擇,但再次不是一個現在可行的選項。我在這裏卡住了嗎?我應該回去通過採用枚舉並返回bool的方法來做到這一點。如果能夠讓我通過自定義的attiributes實現這個功能,我很高興能夠學習到詳細/複雜的東西。
任何與我如何可以去這方面的幫助將不勝感激。
由於現在它的設置方式,通過框架登錄的用戶或者不存在(服務以匿名方式運行)或者不同於實際通過Service.LoginUser登錄的用戶()方法(在這些權限行爲) - 但感謝您的輸入:) – Maverik 2011-04-28 15:41:24
你不能在Service.LoginUser()中定義你的主體,並將其設置爲當前的主體?像'Thread.CurrentPrincipal =新的GenericPrincipal(新的GenericIdentity(用戶,密碼),角色);'?我認爲這可能有效。 – LazyOfT 2011-04-28 15:49:52
嗯,我沒有想到這一點。我現在即將衝出辦公室,但當我週一再回來時,我會盡力讓它變成這樣。我會在回去之後回來。非常感謝這個想法。 – Maverik 2011-04-28 16:33:37