私は C# を 1 か月間使用しているので、この質問に対する「ローカル性」を許してください。しかし、数時間調査したところ、レンガの壁にぶつかりました。
とを使用する WPF アプリケーションの役割ベースの承認の例を左右に見てきました。IIdentity
IPrincipal
多くの情報を見つけることができませんが、より多くのアクセス許可ベースの承認アプローチについては、このアプリではグループがなく、アクセス許可とユーザーのリストだけがあり、誰にでもアクセス許可を割り当てることができると想像してください。
次のことができるようになりたいです。
1) Enabled、ReadOnly、Invisible、Collapsed などの状態のユーザー権限に基づいて UI/要素を制御できる ( https://uiauth.codeplex.com/を参照)
2) クラスで指定できるまたは権限が必要なメソッドレベル ( http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/に似ています)
それ以外の:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
私は次のようなものが欲しい:
[PrincipalPermission(SecurityAction.Demand, Permission = "Can add users")]
現在、これを行う唯一の方法は、多くの文字列比較を使用ICommand
してメソッドに承認ロジックを利用しCanExecute
て配置し、ユーザーが要求されたアクションを実行するために必要な権限を持っているかどうかを確認することです。
// Employee class
public bool HasRight(SecurityRight right)
{
return employee.Permissions.Contains(right);
}
// Implementation, check if employee has right to continue
if (employee.HasRight(db.SecurityRights.Single(sr => sr.Description == "Can edit users")))
{
// Allowed to perform action
}
else
{
// User does not have right to continue
throw SecurityException;
}
Enum Flags が探しているものかもしれないと言われました [Flags] Enum Attribute は C# で何を意味しますか?
enum/flag/bits は理解できたと思いますが、実装を完了するには不十分です...
私が持っている場合:
EmployeeModel
EmployeeViewModel
ThingTwoModel
ThingTwoViewModel
MainView
すべてがどこに行き、すべてを結びつける方法がわかりません....これが私がこれまでに持っているものです(これは実際の例ではないことに気づきました...それが私の問題です!):
[Flags]
public enum Permissions
{
None = 0,
Create = 1 << 0,
Read = 1 << 1,
Update = 1 << 2,
Delete = 1 << 3,
User = 1 << 4,
Group = 1 << 5
}
public static void testFlag()
{
Permissions p;
var x = p.HasFlag(Permissions.Update) && p.HasFlag(Permissions.User);
var desiredPermissions = Permissions.User | Permissions.Read | Permissions.Create;
if (x & p == desiredPermissions)
{
//the user can be created and read by this operator
}
}
ご指導ありがとうございました。