问个权限设计的问题

ayun00 2009-04-06 01:28:16
假设有用户A B C D 对 页面Example 都有访问权限
但是一. A B C D 4个用户能够访问的时间不一样,比如A是每天上午 B是本月1-15号 ,C是注册后的一个星期内,D只能访问50次等等.
二. A B C 3个用户访问页面Example后,每个用户的扣分可能不一样,比如A不扣分,A扣1分,C扣2分等等(1和2的情况可能交叉,例如:同样是"每天上午"可以访问的用户,一个扣一分,一个扣2分)
三.每个用户都可能被临时赋予访问权限
请问这样的权限系统怎么设计?
我开始的想法是根据每种情况设置一个role来控制, 但是这样是不是太复杂了?以下是我的表设计
表一
用户role
用户id | roleid | 开始时间 | 结束时间 | 使用数额
表二
基本role
roleid | role描叙

另外在页面Example 有多个role可以访问后,我怎么判断那些用户可以访问?如果用switch case 写死的话,新增加了一个role后程序要重新编译
怎样写才可以在增加role后,不要改写程序.
...全文
157 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
村部 2009-04-07
  • 打赏
  • 举报
回复
路过
ayun00 2009-04-06
  • 打赏
  • 举报
回复
打错了,是 "就是同一个用户拥有多个role的问题,"
ayun00 2009-04-06
  • 打赏
  • 举报
回复
谢谢 runffer_yang
我想补充几个问题
1.就是不同role的不同业务逻辑,应该封装在哪里?比如 "每天上午" 这个逻辑
2.就是不同用户拥有多个role的问题, 如果多个role都有访问页面Example的权限,要怎么处理
staywithc 2009-04-06
  • 打赏
  • 举报
回复
关注
ayun00 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyq11 的回复:]
设置权限实体类,通过用户,角色实现操作,同时数据库记录用户登录日志
[/Quote]你说得太笼统了....
ayun00 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 runffer_yang 的回复:]
1. 一般业务逻辑是封装在Model里的。
比如有 Staff,Student,Parent这3个类,
那么在各个类里写"每天上午"的业务逻辑。

2. 不同用户拥有多个role:
我觉得应该把他们设成同一个role,但是permission不同,你可以定义个Permission类,
比如看 Permission.permit(user_id, business_logic_id)看看用户有没有权限来做一件事。
在controller和view里根据permission.permit()写代码。

不同的role写不同的controlle…
[/Quote]

谢谢
对于第一点 我通常把Model理解成为实体类,你是不是指的独立的业务逻辑类?
对于你说的第二点我理解成,把浏览权当成最基本的一条role(这个例子中), 然后根据用户的permission进行业务逻辑判断,得到用户是否有访问的role,是不是这样?

但是这样只是解决了当一个角色只有一个业务逻辑的问题,对一个用户可能有多个角色,可能同时拥有几个业务,这几个业务逻辑都能得到访问权限的情况怎么解决?
wuyq11 2009-04-06
  • 打赏
  • 举报
回复
设置权限实体类,通过用户,角色实现操作,同时数据库记录用户登录日志
isboc 2009-04-06
  • 打赏
  • 举报
回复
这个权限也太复杂了吧。啥系统呀?
Steve 2009-04-06
  • 打赏
  • 举报
回复
另外做一个表page_role
用户id或者roleid | 页面action或者URI(比如Example)
这样对哪个页面哪个用户可以访问只要查这个表就可以了.不用写switch case

如果扣分是固定的几种,做个表 reduce_point
reduce_point_id| point_num| description
表一增加reduce_point_id
就知道访问的时候扣多少分了.
如果不固定,每个用户都可能不同,直接在表一里加reduce_point_num

对于临时访问权限,可以做个特殊的role代表这个权限,也可以对page_role临时增加该用户

如果根据访问权限不同页面的表达不同,那你得写switch case了,不过这是有限的,不可能要求每个用户的界面都一样.

另外自己写custom tag的话,对一些链接呀,按钮,把权限都加进去(没有权限的时候不输出)
这样写view的时候就不用考虑权限了.
qingniaoIT 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 runffer_yang 的回复:]
1. 一般业务逻辑是封装在Model里的。
比如有 Staff,Student,Parent这3个类,
那么在各个类里写"每天上午"的业务逻辑。

2. 不同用户拥有多个role:
我觉得应该把他们设成同一个role,但是permission不同,你可以定义个Permission类,
比如看 Permission.permit(user_id, business_logic_id)看看用户有没有权限来做一件事。
在controller和view里根据permission.permit()写代码。

不同的role写不同的controlle…
[/Quote]
你这里运用了MVC模式..
Steve 2009-04-06
  • 打赏
  • 举报
回复
1. 一般业务逻辑是封装在Model里的。
比如有 Staff,Student,Parent这3个类,
那么在各个类里写"每天上午"的业务逻辑。

2. 不同用户拥有多个role:
我觉得应该把他们设成同一个role,但是permission不同,你可以定义个Permission类,
比如看 Permission.permit(user_id, business_logic_id)看看用户有没有权限来做一件事。
在controller和view里根据permission.permit()写代码。

不同的role写不同的controller和view。
不然代码太乱。
readfuture 2009-04-06
  • 打赏
  • 举报
回复
一般来说,至少有三张表吧
用户表,角色、用户关联表,角色字典表,

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧