我正在asp.net(C#)的网站上工作。我想授权每个登录用户(限制打开任何用户没有权限的网页)。我有2个表用户和角色在Sql Server从我想要角色&然后授权该用户。从c#数据库授权用户
0
A
回答
1
因为用户和角色有多对多的关系,所以用户和角色之间会有另一个联结表。比方说,这将是的UserRole
所以,现在对任何要求您将设计一个全球性的过滤器/处理器将执行以下操作:如果你想使用一个存储过程来验证用户接入
var user = Session["UserName"]; // getting logged in user
var role = // query that junction table **UserRoles** to get all the roles this current user has
0
,你将需要:
1)额外的表存储角色为用户 - 姑且称之为UserXRole
2)存储过程或用户定义的函数来获取用户角色或检查用户是否具有某个角色。类似以下内容:
CREATE PROCEDURE dbo.UserHasRole
(
@UserId INT,
-- if you provide role name or code, an extra join with dbo.Role is required
@RoleId INT
)
AS
BEGIN
DECLARE @result BIT = (CASE
WHEN EXISTS (
SELECT 1
FROM dbo.UserXRole X
WHERE X.UserId = @UserId AND X.RoleId = @RoleId) THEN 1
ELSE 0)
RETURN @result
END
代码服从用户定义的函数限制,所以您可以将其更改为返回BIT的函数。如果您怀疑认证逻辑将来可能会变得复杂,请将其保留为存储过程。
3)呼叫使用当前登录用户标识符
每当你验证用户身份验证,我希望把关于用户登录到Session
对象的一些信息的程序。
检查用户必须具备某种角色才能执行某些操作意味着使用当前用户标识(例如Session["UserId"]
)和所需角色(RoleId
)调用存储过程。
上述方法应该可行,但它可能会导致对您的数据库的很多调用。更好的方法是:
1)在认证时缓存所有用户角色 - 当用户通过认证时,将他/她的所有角色存储在会话中的列表中。例如: -
Session["CurrentUserRoles"] = rolesFromDb.Select(r => r.RoleId).ToList();
2)检查,如果用户有一定的作用在内存中只是做。例如:
bool hasSomeRole = (Session["CurrentUserRoles"] as IList<int>)?.Contains(someRoleId) ?? false;
事实上,问题是相当广泛的。尝试使用建议的解决方案之一,并在遇到困难时回复更具针对性的问题。
相关问题
- 1. 授权用户从MySQL数据库
- 2. 授予数据库用户权限
- 3. JDBC - 授权用户通过数据库
- 4. 如何将用户添加到数据库并授权用户
- 5. 数据库授权更新
- 6. 为授权用户创建账户的数据库设计
- 7. 应用程序使用数据库授权和验证用户
- 8. 从授权的Google帐户获取基本的用户数据
- 9. 如何使用Puppet授予用户Mongodb数据库特权?
- 10. MVC4,根据用户表授权用户
- 11. 如何生成授予数据库用户的数据库表的权限表?
- 12. “真实”数据库授予用户什么权限?
- 13. 授权邀请用户通过数据库触发器
- 14. 解析数据库授权 - 用户对象的安全
- 15. MYSQL:授予权限给所有的用户对数据库
- 16. Postgres创建数据库用户只有授权访问模式
- 17. 将权限授予多个数据库用户在一行
- 18. MongoDB未经授权的用户可以创建数据库
- 19. PHP PDO创建MySQL数据库和用户,并授予权限
- 20. 授予用户一个数据库问题的权限
- 21. 数据库授予权限表一个未知的用户
- 22. 什么数据库特权授予用户?
- 23. 结合用户数据库中的授权角色
- 24. 如何从数据库和授权用户收回腌制密码?
- 25. SQL Server授予用户从另一个数据库的EXECUTE权限
- 26. 从sqlite数据库中搜索用户并授予其登录权限?
- 27. PowerShell用户授权
- 28. Swift用户授权
- 29. Rails用户授权
- 30. has_secure_password用户授权
我既不使用asp.net身份也不使用MVC,它是一个简单的asp.net网站。我只通过sql sp验证用户。 –