3

私はC#を1か月間行っているので、この質問の「ローカル性」を許してください。しかし、数時間調査したところ、レンガの壁にぶつかりました。

とを使用する WPF アプリケーションの役割ベースの承認の例を左右に見てきました。IIdentityIPrincipal

多くの情報を見つけることができませんが、より多くのアクセス許可ベースの承認アプローチについては、このアプリではグループがなく、アクセス許可とユーザーのリストだけがあり、誰にでもアクセス許可を割り当てることができると想像してください。

次のことができるようになりたいです。

  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と同様) -チェック/ )

それ以外の:

[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/flag/bits は理解していると思いますが、実装を完了するには不十分です...

私が持っている場合:

従業員モデル従業員ビュー
モデル

すべてがどこに行き、すべてを結び付ける方法がわかりません....これが私がこれまでに持っているものです:

    [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
        }
    }
4

1 に答える 1

1

多くの役割ベースのソリューションが見られる理由は、それが長期的に見てはるかに保守しやすいソリューションだからです。

個人に権限を与えて、組織全体で各個人を管理する必要はなく、アプリケーションの機能セットに対するさまざまなレベルの承認を持ついくつかのテンプレート (ロール) を設定できます。

次に、ユーザーが特定のアクションを実行できるかどうかについて、ユーザーがそのロールに属しているかどうかを確認できます。

おそらくあなたが望むほど直接的にあなたの質問に役立たないことはわかっていますが、同様の解決策を使用することを強くお勧めします.

于 2013-09-27T19:40:23.447 に答える