1
我正在開發一個應用程序,其中客戶端需要和極其靈活的用戶權限系統。例如,用戶應該能夠在表單A中擁有更新權限,但不能在表單B中擁有更新權限(這會阻止我定義廣泛的更新權限)。管理員還應該能夠將特定權限轉移給用戶。授予一個超級靈活的用戶訪問/修改權限系統
我正在考慮使用Command Pattern
和CanExecute
方法,但並不確定如何以這種動態/特定方式使用它。有什麼建議麼 ?
我正在開發一個應用程序,其中客戶端需要和極其靈活的用戶權限系統。例如,用戶應該能夠在表單A中擁有更新權限,但不能在表單B中擁有更新權限(這會阻止我定義廣泛的更新權限)。管理員還應該能夠將特定權限轉移給用戶。授予一個超級靈活的用戶訪問/修改權限系統
我正在考慮使用Command Pattern
和CanExecute
方法,但並不確定如何以這種動態/特定方式使用它。有什麼建議麼 ?
我的應用程序中有類似的情況,可以通過插件進行擴展,插件可以引入自己的權限。我解決了以下方法:
PermissionManager
簡體類結構:
public class PermissionManager
{
public static Dictionary<string, IEnumerable<string>> AvailablePermissions { get; set; }
public static bool? Can(User user, string permission)
{
// check DB
return DENIED ? false : (ALLOWED ? true : null);
}
}
public class MyPlugin : IPlugin
{
public void Init()
{
PermissionManager.AvailablePermissions["MyPlugin"] =
new List<string>() { "Permission1", "Permission2" };
}
public void DoWork()
{
if (PermissionManager.Can(user, "Permission1") != true)
throw new NotAllowedException();
// do work
}
}
這是我使用的基本模式。當然,您應該使用常量或類似的權限名稱/鍵。管理用戶界面可以在配置界面中迭代AvailablePermissions
。
在DB我有類似如下(EF代碼優先):在DB
public class UserProfilePermissions
{
public UserProfile User { get; set; }
public Permission Permission { get; set; }
public bool IsAllowed { get; set; }
}
public class Permission
{
public int Id { get; set; }
public string Key { get; set; }
public string Group { get; set; }
}
所以對於每個許可有創造(第一個任務)一個Permission
進入和通過映射映射表使用IsAllowed
來定義「允許」或「拒絕」。
null
值定義了一個未設置的權限,因此可以使用默認值(=>未設置權限並不總是說「DENIED」)。
映射表也可以以相同的樣式用於例如角色。
感謝您的回答,這看起來非常好。你在數據庫方面的設計如何?例如,你是否在表中手動指定該模塊的權限類型? – Cemre
@Cemre:添加了基本模式。 – ChrFin