wordpress 国外主题站,js搜索网站开发,wordpress 上传网站吗,wordpress页面添加描述权限系统模块对于互联网产品是一个非常重要的功能#xff0c;可以控制不同的角色合理的访问不同的资源从而达到安全访问的作用权限控制有哪些模型ACLRBAC 基于角色的访问控制从上图我们可以看出#xff0c;ACL是用户和权限直接关系的#xff0c;而RBAC则是通过角色间接关联用…权限系统模块对于互联网产品是一个非常重要的功能可以控制不同的角色合理的访问不同的资源从而达到安全访问的作用权限控制有哪些模型ACLRBAC 基于角色的访问控制从上图我们可以看出ACL是用户和权限直接关系的而RBAC则是通过角色间接关联用户和权限的。所以我们注意到角色是RBAC系统的一个重要属性。什么是RBAC模型RBAC(Role-Based Access Control基于角色的访问控制)就是用户通过角色与权限进行关联。简单地说一个用户拥有若干角色每一个角色拥有若干权限。这样就构造成“用户-角色-权限”的授权模型。在这种模型中用户与角色之间角色与权限之间一般者是多对多的关系。为什么要选择RBAC模型原因如下方便用户分组方便权限分配和回收扩展方便可以满足大部分业务需求这些也就是我们在说权限管理前应该先知道权限管理要有功能。RBAC模型的关系图图中有重要的RBAC模型5大属性分别是1 用户属性(张三、李四、王五)2 角色属性(销售经理、销售、前台)3 用户与角色的关系(张三 是 销售经理 、李四 王五 是 销售)4 权限(添加客户、编辑客户、删除客户查看客户)5 权限与角色的关系(销售 拥有 查看客户的 权 限、销售经理可以 查看/添加/删除/编辑客户的)一个RBAC权限模块必然要实现三个功能用户管理用户列表添加用户编辑用户设置用户角色角色管理 角色列表添加角色编辑角色设置角色权限权限管理权限列表新增权限编辑权限如图所示数据表设计用户表CREATE TABLE user (id int(11) unsigned NOT NULL AUTO_INCREMENT,name varchar(20) NOT NULL DEFAULT COMMENT 姓名,email varchar(30) NOT NULL DEFAULT COMMENT 邮箱,is_admin tinyint(1) NOT NULL DEFAULT 0 COMMENT 是否是超级管理员 1表示是 0 表示不是,status tinyint(1) NOT NULL DEFAULT 1 COMMENT 状态 1有效 0无效,updated_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 最后一次更新时间,created_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 插入时间,PRIMARY KEY (id),KEY idx_email (email)) ENGINEInnoDB DEFAULT CHARSETutf8 COMMENT用户表;角色表CREATE TABLE role (id int(11) unsigned NOT NULL AUTO_INCREMENT,name varchar(50) NOT NULL DEFAULT COMMENT 角色名称,status tinyint(1) NOT NULL DEFAULT 1 COMMENT 状态 1有效 0无效,updated_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 最后一次更新时间,created_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 插入时间,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8 COMMENT角色表;用户角色表CREATE TABLE user_role (id int(11) unsigned NOT NULL AUTO_INCREMENT,uid int(11) NOT NULL DEFAULT 0 COMMENT 用户id,role_id int(11) NOT NULL DEFAULT 0 COMMENT 角色ID,created_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 插入时间,PRIMARY KEY (id),KEY idx_uid (uid)) ENGINEInnoDB DEFAULT CHARSETutf8 COMMENT用户角色表;权限详情表CREATE TABLE access (id int(11) unsigned NOT NULL AUTO_INCREMENT,title varchar(50) NOT NULL DEFAULT COMMENT 权限名称,urls varchar(1000) NOT NULL DEFAULT COMMENT json 数组,status tinyint(1) NOT NULL DEFAULT 1 COMMENT 状态 1有效 0无效,updated_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 最后一次更新时间,created_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 插入时间,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8 COMMENT权限详情表;角色权限表CREATE TABLE role_access (id int(11) unsigned NOT NULL AUTO_INCREMENT,role_id int(11) NOT NULL DEFAULT 0 COMMENT 角色id,access_id int(11) NOT NULL DEFAULT 0 COMMENT 权限id,created_time timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 插入时间,PRIMARY KEY (id),KEY idx_role_id (role_id)) ENGINEInnoDB DEFAULT CHARSETutf8 COMMENT角色权限表;用户操作记录表CREATE TABLE app_access_log (id int(11) NOT NULL AUTO_INCREMENT,uid bigint(20) NOT NULL DEFAULT 0 COMMENT 品牌UID,target_url varchar(255) NOT NULL DEFAULT COMMENT 访问的url,query_params longtext NOT NULL COMMENT get和post参数,ua varchar(255) NOT NULL DEFAULT COMMENT 访问ua,ip varchar(32) NOT NULL DEFAULT COMMENT 访问ip,note varchar(1000) NOT NULL DEFAULT COMMENT json格式备注字段,created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),KEY idx_uid (uid)) ENGINEInnoDB DEFAULT CHARSETutf8 COMMENT用户操作记录表;代码实现本系统所有页面都是需要登录之后才能访问的 在框架中加入统一验证方法public function beforeAction($action) {$login_status $this-checkLoginStatus();if ( !$login_status !in_array( $action-uniqueId,$this-allowAllAction ) ) {if(Yii::$app-request-isAjax){$this-renderJSON([],未登录,请返回用户中心,-302);}else{$this-redirect( UrlService::buildUrl(/user/login) );//返回到登录页面}return false;}//保存所有的访问到数据库当中$get_params $this-get( null );$post_params $this-post( null );$model_log new AppAccessLog();$model_log-uid $this-current_user?$this-current_user[id]:0;$model_log-target_url isset( $_SERVER[REQUEST_URI] )?$_SERVER[REQUEST_URI]:;$model_log-query_params json_encode( array_merge( $post_params,$get_params ) );$model_log-ua isset( $_SERVER[HTTP_USER_AGENT] )?$_SERVER[HTTP_USER_AGENT]:;$model_log-ip isset( $_SERVER[REMOTE_ADDR] )?$_SERVER[REMOTE_ADDR]:;$model_log-created_time date(Y-m-d H:i:s);$model_log-save( 0 );/*** 判断权限的逻辑是* 取出当前登录用户的所属角色* 在通过角色 取出 所属 权限关系* 在权限表中取出所有的权限链接* 判断当前访问的链接 是否在 所拥有的权限列表中*///判断当前访问的链接 是否在 所拥有的权限列表中if( !$this-checkPrivilege( $action-getUniqueId() ) ){$this-redirect( UrlService::buildUrl( /error/forbidden ) );return false;}return true;}检查是否有访问指定链接的权限public function checkPrivilege( $url ){//如果是超级管理员 也不需要权限判断if( $this-current_user $this-current_user[is_admin] ){return true;}//有一些页面是不需要进行权限判断的if( in_array( $url,$this-ignore_url ) ){return true;}return in_array( $url, $this-getRolePrivilege( ) );}获取某用户的所有权限,取出指定用户的所属角色 在通过角色取出所属权限关系,在权限表中取出所有的权限链接public function getRolePrivilege($uid 0){if( !$uid $this-current_user ){$uid $this-current_user-id;}if( !$this-privilege_urls ){$role_ids UserRole::find()-where([ uid $uid ])-select(role_id)-asArray()-column();if( $role_ids ){//在通过角色 取出 所属 权限关系$access_ids RoleAccess::find()-where([ role_id $role_ids ])-select(access_id)-asArray()-column();//在权限表中取出所有的权限链接$list Access::find()-where([ id $access_ids ])-all();if( $list ){foreach( $list as $_item ){$tmp_urls json_decode( $_item[urls],true );$this-privilege_urls array_merge( $this-privilege_urls,$tmp_urls );}}}}return $this-privilege_urls ;}链接http://www.startphp.cn/front/php/112730.html作者leifeng以上内容希望帮助到大家很多PHPer在进阶的时候总会遇到一些问题和瓶颈业务代码写多了没有方向感不知道该从那里入手去提升对此我整理了一些资料包括但不限于分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6laravelYII2RedisSwoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家最后祝所有大家在面试中过关斩将拿到心仪offer。如果想与一群3-8年资深开发者一起交流学习的话需要请戳这里shimo.im