首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用asp.net和MSSQL管理基于角色的用户权限?

问如何使用asp.net和MSSQL管理基于角色的用户权限?
EN

Stack Overflow用户
提问于 2018-11-02 19:55:37
回答 1查看 205关注 0票数 0

我有多个asp.net网页表单和sql express数据库。在web表单中,有3种类型的操作需要从菜单中进行控制

代码语言:javascript
复制
 ADD, DELETE , EDIT.

我想创建自定义用户角色来指定用户权限,以管理asp.net c#应用程序的访问控制(菜单、添加、删除和编辑可见性)。

目前,我正在尝试管理每个按钮和链接在每个页面上使用简单的sql阅读器查询。

代码语言:javascript
复制
 string yes = "1";
 if (rdr["access"].ToString() == yes.ToString())
    Button1.Visible = true;
EN

回答 1

Stack Overflow用户

发布于 2018-11-14 23:47:31

您将需要以下SQL表:

代码语言:javascript
复制
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)
)

然后构建角色提供程序类

可以使用EF或ADO.NET来实现这些方法

代码语言:javascript
复制
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中设置它

代码语言:javascript
复制
<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 (access数据库)的示例实现,您可以使用SqlConnection、SqlCommand、SqlDataReader...将实现更改为使用SQL数据库

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53118155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档