簡體   English   中英

如何使用asp.net和MSSQL管理基於角色的用戶權限?

[英]How to Manage Role Based User Rights using asp.net & MSSQL?

我有多個asp.net網絡表單和sql express數據庫。 在Web表單中,需要從菜單中控制3種類型的動作

 ADD, DELETE , EDIT.

我想創建自定義用戶角色,以指定用戶權限來管理asp.net c#應用程序的訪問控制(菜單,添加,刪除和編輯可見性)。

目前,我正在嘗試在每個頁面上為每個按鈕和鏈接使用簡單的SQL Reader查詢。

 string yes = "1";
 if (rdr["access"].ToString() == yes.ToString())
    Button1.Visible = true;

您將需要以下SQL表:

CREATE TABLE Roles
(
    Rolename Text (255) NOT NULL,
    ApplicationName Text (255) NOT NULL, 
    CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName)
)

CREATE TABLE UsersInRoles
(
    Username Text (255) NOT NULL,
    Rolename Text (255) NOT NULL,
    ApplicationName Text (255) NOT NULL,
    CONSTRAINT PKUsersInRoles PRIMARY KEY (Username, Rolename, ApplicationName)
)

然后構建Role Provider類

您可以使用EF或ADO.NET來實現方法

public class SqlRoleProvider: RoleProvider
{
    public override void Initialize(string name, NameValueCollection config)
    {
        // 
        // Initialize values from web.config. 
        // 
    }

    public override void AddUsersToRoles(string[]  usernames, string[] rolenames)
    {
    }

    public override void CreateRole(string rolename)
    {
    }

    public override bool DeleteRole(string rolename, bool throwOnPopulatedRole)
    {

    }

    public override string[] GetAllRoles()
    {

    }

    public override string[] GetRolesForUser(string username)
    {

    }

    public override string[] GetUsersInRole(string rolename)
    {

    }

    public override bool IsUserInRole(string username, string rolename)
    {

    }

    public override void RemoveUsersFromRoles(string[] usernames, string[] rolenames)
    {

    }

    public override bool RoleExists(string rolename)
    {

    }

    public override string[] FindUsersInRole(string rolename, string usernameToMatch)
    {

    }

}

您必須在web.config中進行設置

<configuration>
  <connectionStrings>
    <add name="SqlServices" connectionString="DSN=RolesDSN;" />
  </connectionStrings>

  <system.web>
    <authentication mode="Forms" />
      <forms loginUrl="loginvb.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

    <authorization>
      <deny users="?" />
    </authorization>

    <roleManager defaultProvider="SqlRoleProvider" 
      enabled="true"
      cacheRolesInCookie="true"
      cookieName=".ASPROLES"
      cookieTimeout="30"
      cookiePath="/"
      cookieRequireSSL="false"
      cookieSlidingExpiration="true"
      cookieProtection="All" >
      <providers>
        <clear />
        <add
          name="SqlRoleProvider"
          type="Samples.AspNet.Roles.SqlRoleProvider"
          connectionStringName="SqlServices" 
          applicationName="SampleApplication" 
          writeExceptionsToEventLog="false" />
      </providers>
    </roleManager>

  </system.web>
</configuration>

Microsoft上有示例角色提供程序:

配置和數據庫模式:

https://msdn.microsoft.com/en-us/library/tksy7hd7.aspx

OLEDB(訪問數據庫)的示例實現,您可以使用SqlConnection,SqlCommand,SqlDataReader將實現更改為使用SQL數據庫。

https://msdn.microsoft.com/en-us/library/317sza4k.aspx

暫無
暫無

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

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