laravel5.1 权限管理(使用romanbican/roles)

我在User.php中

use Bican\Roles\Traits\HasRoleAndPermission;
use Bican\Roles\Contracts\HasRoleAndPermission as HasRoleAndPermissionContract;

class User extends Model implements AuthenticatableContract,
                                    AuthorizableContract,
                                    CanResetPasswordContract,
                                    HasRoleAndPermissionContract
{
    use Authenticatable, Authorizable, CanResetPassword, HasRoleAndPermission;

报错:Trait method can has not been applied, because there are collisions with other trait methods on App\\User

请问是不能有AuthorizableContract这个吗(官方没写这个, 但是教程有这个也么可有报错, 我去掉这个AuthorizableContract就不冲突了)
请问这个怎么解决

JellyBool

这是因为在 Laravel User 的其他的 Trait 中,也使用了 can 方法,我记得视频是有说解决方法的吧。instead 关键字

server126 回复 JellyBool

视频里说解决办法了

dmodai 回复 JellyBool

我看视频后半段看到了, 我在视频出错前就出现了, 很悲剧,现在知道了;不过又出现了在app/Exceptions/Handler.php中拦截不到错误, 已经在路由中注册了middleware

 use Bican\Roles\Exceptions\AccessDeniedException as AccessDeniedException;

public function render($request, Exception $e)
    {
        // if ($e instanceof ModelNotFoundException) {
        //     $e = new NotFoundHttpException($e->getMessage(), $e);
        // }
        die('sww');
        if ($e instanceof AccessDeniedException) {
          echo 'ss';die();
            // you can for example flash message, redirect...
            return redirect()->back();
        }
        die('a');
        return parent::render($request, 'ss');
    }

postman返回


{
  "message": "You don't have a required ['admin'] role.",
  "status_code": 500,
}
JellyBool 回复 dmodai

确定数据库有 admin 这个角色么

dmodai 回复 JellyBool

有的啊, 出这个错是因为:我先给登陆用户赋予了admin角色,然后数据库直接修改这个用户id(让这个登录用户没有admin权限), 然后就是这个错了
这是dinggo 的路由

            $api->get('roles', [
              'middleware' => 'role:admin',
              'uses' => 'RoleController@createRole'
            ]);
dmodai 回复 JellyBool

我还有一个问题, 因为要做权限管理, 所以permission的部分应该是根据dingo中的路由来一一对应吗?那我有几个问题

  • 在代码中如何显示全部路由呢? 命令行确实可以
  • 显示出路由后是当成permission的slug的吗?如果路由太长是否要考虑用一整套新的规则来对应,例如 用 . 连接?如何限制permission和路由一一对应呢,也没有多余?

不知道我这样想是否有错, 或者是用其他什么方式来解决?

JellyBool 回复 dmodai

额…不知道你为啥会产生这样的想法。permission 个人觉得是一个用户的特定权限这样的需求, role 是多个用户公用多个权限的话,创建一个 role,这跟 linux 中的 user 和 group 都是一样的道理啊

dmodai 回复 JellyBool

问题一中还是拦截不到错误, 不知道怎么回事
问题二我已经咨询其他人解决, permission是依据接口才有的 , 肯定是死的