C# 控制windows应用程序中的用户权限

C# 控制windows应用程序中的用户权限,c#,sql,windows,permissions,C#,Sql,Windows,Permissions,我已经用C和SQL 2008设计了Windows应用程序。 现在,我想控制用户可以访问哪个部分及其权限 所以,我想知道是用sql设计表并为每个用户设置权限更好,还是有其他解决方案更好?一般来说,我看到的是以下几点: 有一张像这样的桌子: tblUser UserId UserName etc... 角色表: tblRole RoleId Name 和链接器表: tblUserRole UserId RoleId 在应用程序中,您将检查

我已经用C和SQL 2008设计了Windows应用程序。 现在,我想控制用户可以访问哪个部分及其权限


所以,我想知道是用sql设计表并为每个用户设置权限更好,还是有其他解决方案更好?

一般来说,我看到的是以下几点:

有一张像这样的桌子:

tblUser
    UserId
    UserName
    etc...
角色表:

tblRole
    RoleId
    Name
和链接器表:

tblUserRole
    UserId
    RoleId
在应用程序中,您将检查当前用户在tblUserRole表中是否具有相应的角色。如果是,请允许当前用户使用该功能,否则显示错误消息,禁止用户输入等

例如,在MS SQL中,可以有以下类型的存储过程:

添加用户

添加用户角色

用户是否具有角色


使用sql有什么解决方案吗?我的意思是用sql为每个应用程序用户创建用户并定义访问级别?@Franchescottoti上面的答案是用sql。所有数据都存储在SQL中。实际检查可以在存储过程中进行,也可以分别在代码中进行。@Franchescottoti我已经用一些示例SQL更新了我的答案
CREATE PROCEDURE spAddUser
    @UserName AS nvarchar(256)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

INSERT INTO tblUser
    (UserName)
    VALUES(@UserName)

SELECT SCOPE_IDENTITY( ) AS 'Id'
END
GO
CREATE PROCEDURE spAddUserRole
@UserId AS int,
@RoleId As int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

INSERT INTO tblUserRole
    (UserId, RoleId)
    VALUES(@UserId, @RoleId)
END
GO
CREATE PROCEDURE spDoesUserHaveRole
@UserId AS int,
@RoleId As int,
@HasRole AS bit OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

SELECT @HasRole = COUNT(UserId) > 0 FROM tblUserRole
    WHERE UserId = @UserId AND
          RoleId = @RoleId
END
GO