簡體   English   中英

如何教User.IsInRole

[英]How to teach User.IsInRole

目標

教導User.IsInRole()方法數據庫上存在哪些角色。

問題

我不知道

實驗室

我創建了以下視圖來測試角色檢測:

@if (User.IsInRole("Administrator"))
{
    <p>Hello, admin!</p>
}
else
{
    <p>Hello, guy!</p>
}

而且我總是收到Hello, guy! 消息,即使我是管理員也是如此。

為了從數據庫中獲取可用角色的字符串數組,我創建了以下方法:

public class PermissionProvider : RoleProvider
{
    private AppContext context = new AppContext();

    [...]

    public override string[] GetRolesForUser(string username)
    {
        app_users user = 
            context.app_users.FirstOrDefault(u => u.Email == username);

        if (user == null)
        {
            return new string[] { };
        }

        List<String> permissions = 
            context.app_users_types.Select(p => p.Label).ToList();

        return permissions.ToArray();
    }

    public override bool IsUserInRole(string username, string roleName)
    {
        app_users user = 
            context.app_users.FirstOrDefault(u => u.Email == username);

        app_users_types type = 
            context.app_users_types.FirstOrDefault(t => t.Label == roleName);

        if (user.TypeId == type.Id)
        {
            return true;
        }

        return false;
    }

    [...]
}

(該app_users_types是表,用於存儲可用角色。該Label屬性是角色的名稱)。

知識[更新1]

我已經在Web.Config上設置了RoleProvider 看一看:

<roleManager enabled="true" defaultProvider="PermissionProvider">
  <providers>
    <add name="PermissionProvider" type="App.Security.PermissionProvider" />
  </providers>
</roleManager>

但是,當我運行該應用程序時,出現以下錯誤:

在應用程序的啟動前初始化階段不能調用此方法。

如您所見, App.Security命名空間內有一個PermissionProvider類。

RoleProvider必須實現IsUserInRole()方法。 您只需要做的就是配置角色提供者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM