不同角色用户查看到列表内容不一样应该怎么做?
目前在我做的系统中使用的权限系统是这样的:
用户---->角色----->权限
但是现在有一个问题,不同的角色能够查看的的数据列表内容是不一样的。举个例子吧。
假设有个2个角色,管理员、普通用户。他们都有查看文章的权限,但是管理员可以查看所有文章,普通用户只能查看自己发布的文章。那么我在查询文章的时候应该怎么判断更好呢?
目前我是写死角色 id 进行判断。但是我这知道这样不好。当新增加角色的时候还要更改代码。在这里我就是想问下大家应该怎么做可以不用写死判断。
看了下大家的回复,可能是我描述的还不太清楚。我重新描述一下:
目前我有3中角色,管理员、代理商、二级代理商。他们都有查看文章列表的权限,但是管理员可以查看全部文章,代理可以查看自己创建的文章和二级代理商创建的文章,二级代理商只能查看自己创建的文章。目前我的做法是,在文章列表方法中进行判断,根据角色返回对应的列表。但是这样做有个缺陷就是当增加新的角色,对应的判断还需要重新修改。想问下有没有什么办法可以不更改代码么?
权限里面返回 用户的角色为管理员 或者用户的
user_id
= 文章的author_id
具体的查看 用户授权
@laravel_denghy 我所理解的这个用户授权的作用是进行权限的验证,不管是 gates 还是策略都只是返回布尔值,仅仅是对操作进行验权。然而权限验证这一步我通过中间件和数据来实现的。不知道我理解的是否正确。或者你能否详细的说一下怎么做么?
一般不用 ID,用更有描述性的
字符串
来替代。因为角色是动态创建的,更倾向于通过控制权限来控制。
你可以认为有一个权限叫做查看所有文章,并且它的标识是
index_article
,你甚至可以用枚举定义它。当你判断的时候就简单了
搞一个权限叫做
view-all-article
,,不就可以了吗,,,只要有这个权限(包括有【包含这个权限的角色】)就可以看全部,不然就只能看自己的,,,
以后不管添加啥角色,只要给他这个权限,就可以看全部文章了,,,
关系表建好,这个做起来就很简单
@DaiChongWeb 能具体说一下怎么做么?
用权限数 或者位运算 做权限 比如Linux 系统 777
我觉得你还是用权限来控制就行了,你再增加权限就OK了,比如 查看个人文章,查看所有文章,查看个人及下级文章,这样的话,增加角色的话就不会有什么影响