V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
laravel
V2EX  ›  PHP

能不能说下后台的权限管理和菜单管理一般怎么做?

  •  
  •   laravel · 2019-07-15 09:25:07 +08:00 · 10309 次点击
    这是一个创建于 1719 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用 laravel,一直没做过权限管理和菜单管理,有哪些 best practice 吗? 比如要实现后台某个登录用户只能显示自己有权限的菜单,该如何做。

    30 条回复    2020-08-06 14:34:13 +08:00
    kchum
        1
    kchum  
       2019-07-15 09:25:58 +08:00 via iPhone
    laravel-admin 不够用吗?
    laravel
        2
    laravel  
    OP
       2019-07-15 09:27:13 +08:00
    @kchum 自己设计呢?
    yiqiao
        3
    yiqiao  
       2019-07-15 09:31:34 +08:00
    @laravel 菜单加个路由名,去和用户拥有的权限列表匹配
    ben1024
        4
    ben1024  
       2019-07-15 09:42:45 +08:00
    权限 RABC + 中间件拦截
    菜单 路由反射
    mirrorpen
        5
    mirrorpen  
       2019-07-15 09:46:43 +08:00
    我们后台用的 vue+element,接口用 laravel,前两个月刚增加了这个需求
    我是这么做的,需要 3 张表,admin_user(后台用户表)、admin_role(角色表)、admin_module(后台模块表),把后台菜单放进模块表里,然后给每个后台用户设置一个角色+权限菜单放入角色表
    Vtwoguest
        6
    Vtwoguest  
       2019-07-15 10:01:52 +08:00
    我们是 role 表+menu 表+rolemenu 表
    brust
        7
    brust  
       2019-07-15 10:04:14 +08:00
    RABC
    不过数据上的权限 就有点...
    比如 100 条记录 权限低的只能看 部分条数 一两个字段,最高权限是所有字段左右条数
    不知道 v 友有什么解决方案
    guyeu
        8
    guyeu  
       2019-07-15 10:14:05 +08:00   ❤️ 1
    一般都是`用户<-多对多->角色<-多对多->权限`模型,权限表里每一项权限对应一个或多个菜单项。
    laravel
        9
    laravel  
    OP
       2019-07-15 10:21:30 +08:00
    言射言射大家
    southsala
        10
    southsala  
       2019-07-15 10:57:30 +08:00
    简单点的就是 8 楼说得,复杂点的可以岗位设置权限(主岗位、兼职岗位)、部门设置权限、角色设置权限、用户组设置权限、直接给用户设置权限,具体看需要
    pota
        11
    pota  
       2019-07-15 11:02:56 +08:00
    RABC + 反射 + 中间间 通过反射控制权限颗粒度 路由显示依据权限控制
    zorichen
        12
    zorichen  
       2019-07-15 11:03:11 +08:00
    同好奇下... 页面 /菜单 /按钮权限 和 数据权限 分离,主流方案是什么
    rockyou12
        13
    rockyou12  
       2019-07-15 11:10:22 +08:00
    @zorichen 就不该分,一个资源对一个接口,ui 上也要对上。同种资源返回的数据不同就在后端建立不同的 dto,用不同的接口返回。

    这样 ui 的元素和后端接口都能映射上。前后端用两套权限设计后面维护铁定会爆炸的
    Yuicon
        14
    Yuicon  
       2019-07-15 11:27:42 +08:00
    非常的麻烦 我看好多都是字符串匹配
    NilXuan
        15
    NilXuan  
       2019-07-15 11:49:39 +08:00
    从框架选择上来说,后端使用 Spring Security 框架;
    从设计上来说是显式的(对资源保护、对行为授权)的 RBAC 模型;
    从流程上来说是用户登录后,返回主页面,然后再向后台(这一步为普通的菜单数据库查询)请求相关菜单、按钮的信息(如链接、图标)返回给前端。
    至此可实现前端的权限管理。
    当然,对于后台接收到的请求,可以在 Spring Security 里再加一层后端验证,防止接口泄露后的非法调用。(以上步骤,实现过一个简单的管理 demo )
    最佳实践的话,今天在 github 上看到一个项目,https://github.com/elunez/eladmin。
    huijiewei
        16
    huijiewei  
       2019-07-15 12:05:08 +08:00
    我一般用 ACL,RBAC 对于大部分中小型项目来说太重太繁琐了
    Takamine
        17
    Takamine  
       2019-07-15 12:10:14 +08:00
    找一个 CMS 后台管理系统,看一下他的数据库表和代码实现:doge:。
    techone
        18
    techone  
       2019-07-15 12:13:12 +08:00
    推荐你个授权库:Laravel Authorization ( https://github.com/php-casbin/laravel-authz
    支持 acl、rbac、基于 restful 的访问控制。
    ericgui
        19
    ericgui  
       2019-07-15 13:19:31 +08:00
    @Takamine 有道理
    ifconfig
        20
    ifconfig  
       2019-07-15 16:37:07 +08:00
    推荐 zizaco/entrust,歪果仁用过都说好
    DefWindowProc
        21
    DefWindowProc  
       2019-07-15 16:48:19 +08:00
    我前段时间正好做了一个权限菜单控制功能,大概思路就是菜单按钮在初始化的时候请求对应的权限,若有该权限则显示,否则不显示,前后端分离项目,后端 spring boot,前端 react
    a54552239
        22
    a54552239  
       2019-07-15 17:33:09 +08:00
    做菜单路由和权限映射
    a54552239
        23
    a54552239  
       2019-07-15 17:33:48 +08:00
    @DefWindowProc 每次加载按钮都请求权限,会不会太频繁?
    jobtesting
        24
    jobtesting  
       2019-07-15 17:36:34 +08:00 via iPhone
    这个要分功能权限和数据权限
    HuasLeung
        25
    HuasLeung  
       2019-07-15 17:37:59 +08:00
    可以自定义一套权限码(如超级管理员使用 0-200,普通管理员使用 201-400,普通用户使用 401 以上……),菜单路由携带进行判断
    tedzhou1221
        26
    tedzhou1221  
       2019-07-16 00:29:07 +08:00 via Android
    如果在深入一点就考虑
    1,权限继承、
    2,数据权限(就是 7 楼所说的)
    3,还有给用户组分配权限
    4,菜单权限控制到按钮级别
    5,缓存( resistance)权限和菜单的数据
    6,
    tedzhou1221
        27
    tedzhou1221  
       2019-07-16 00:29:35 +08:00 via Android
    第 5 点打错,应该是 redis
    jianyan74
        28
    jianyan74  
       2019-07-16 10:09:41 +08:00
    igeeky
        29
    igeeky  
       2019-12-20 19:11:05 +08:00
    我来推荐一个吧:
    https://github.com/iGeeky/wolf
    通用 RBAC 系统,统一用户权限系统, 统一授权及访问控制. (没实现菜单权限控制)
    mustangx
        30
    mustangx  
       2020-08-06 14:34:13 +08:00
    @tedzhou1221 请教下现在数据权限有什么比较好的方案么,现在查阅到相关资料大多数都是通过拦截 mybatis 的执行器然后添加相关的条件的,但是感觉还是少了点通用性,也有在配置项里面设置好条件字段和值,通过切面拦截的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5332 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 07:28 · PVG 15:28 · LAX 00:28 · JFK 03:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.