目錄
回复内容:
首頁 後端開發 php教程 权限设计问题

权限设计问题

Jun 06, 2016 pm 08:09 PM
java mysql php

使用了rbac模式设计权限,现在有种情况。
普通a用户发表一个帖子,
a拥有对这个帖子的编辑,删除,查看权限。
普通b用户,拥有查看权限
小编c用户,拥有对这个帖子的编辑,删除,查看权限。
编辑,删除,查看权限都有对应的按钮,有权限就显示,没有就不显示。
应该怎么设计呢?
例如,编辑按钮对应的是一个按钮,操作节点设计成一个,节点的功能有对自己的主题编辑,对他人的主题编辑。

回复内容:

使用了rbac模式设计权限,现在有种情况。
普通a用户发表一个帖子,
a拥有对这个帖子的编辑,删除,查看权限。
普通b用户,拥有查看权限
小编c用户,拥有对这个帖子的编辑,删除,查看权限。
编辑,删除,查看权限都有对应的按钮,有权限就显示,没有就不显示。
应该怎么设计呢?
例如,编辑按钮对应的是一个按钮,操作节点设计成一个,节点的功能有对自己的主题编辑,对他人的主题编辑。

通常对自己的数据进行编辑、删除是不需要进行权限管理的。因为一般来说网站是划分前后台的,普通用户在前台操作时几乎不用考虑权限问题,是谁的谁就能管理。
详细解释起来很麻烦,你先思考一下,我觉得你主要是陷入误区了。

我这样解释一下:
已 “编辑主题” 和 “编辑我的主题” 为例 用真值表的方式模拟如下:
有 编辑主题 权限 , 有 “编辑我的主题” 权限: T
有 编辑主题 权限 , 无 “编辑我的主题” 权限: T
无 编辑主题 权限 , 有 “编辑我的主题” 权限: 做isAuth检查并返回 isAuth检查结果
无 编辑主题 权限 , 无 “编辑我的主题” 权限: F

那么现在取消 编辑我的主题 权限设置,用isAuth检查代替,真值表为相同结果:
有 编辑主题 权限 , isAuth = T: T
有 编辑主题 权限 , isAuth = F: T
无 编辑主题 权限 , isAuth = T: T
无 编辑主题 权限 , isAuth = F: F

你肯定说了,有的地方就算是用户通过 isAuth 检查也不让他用,此类操作不做isAuth检查不就行了吗?

<code>class Controller {
    protected $_allowIfIsAuth = false;
    public function afterDispatch() {
        if (! $user->hasPermission('permission_name')) {
            if (! ($this->_allowIfIsAuth && $user->isAuth('auth_id'))) {
                return false;
            }
        }
        return true;
    }
}</code>
登入後複製

<code>CREATE TABLE `app_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `gmt_create` datetime NOT NULL COMMENT '数据新增时间',
  `creator` varchar(128) NOT NULL DEFAULT '0' COMMENT '创建者',
  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据修改时间',
  `modifier` varchar(128) NOT NULL DEFAULT '0' COMMENT '修改者',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '是否逻辑删除,默认为n',
  `ha_id` varchar(64) DEFAULT NULL COMMENT '会员统一ID',
  `buc_id` varchar(64) DEFAULT NULL COMMENT '员工统一ID',
  `work_no` varchar(64) DEFAULT NULL COMMENT '工号',
  `status` varchar(32) DEFAULT NULL COMMENT '状态',
  `user_type` varchar(32) DEFAULT NULL COMMENT '用户类型',
  `user_name` varchar(128) DEFAULT NULL COMMENT '用户名称',
  `email` varchar(64) DEFAULT NULL COMMENT 'E-mail',
  `mobile` varchar(32) DEFAULT NULL COMMENT '手机',
  `phone` varchar(32) DEFAULT NULL COMMENT '电话',
  `home_page_url` varchar(128) DEFAULT NULL COMMENT '主页URL',
  `user_no` varchar(128) DEFAULT NULL COMMENT '用户编号',
  `login_id` varchar(128) DEFAULT NULL COMMENT '登录ID',
  PRIMARY KEY (`id`),
  KEY `idx_workno` (`work_no`,`is_deleted`),
  KEY `login_id` (`login_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1774 DEFAULT CHARSET=utf8 COMMENT='系统用户';

CREATE TABLE `app_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `gmt_create` datetime NOT NULL COMMENT '数据新增时间',
  `creator` varchar(128) NOT NULL DEFAULT '0' COMMENT '创建者',
  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据修改时间',
  `modifier` varchar(128) NOT NULL DEFAULT '0' COMMENT '修改者',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '是否逻辑删除,默认为n',
  `role_name` varchar(64) DEFAULT NULL COMMENT '角色名称',
  `role_type` varchar(32) DEFAULT NULL COMMENT '角色类型',
  `home_page_url` varchar(128) DEFAULT NULL COMMENT '主页URL',
  PRIMARY KEY (`id`),
  KEY `idx_rolename` (`role_name`,`is_deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=1065 DEFAULT CHARSET=utf8 COMMENT='系统角色';

CREATE TABLE `app_role_org_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `gmt_create` datetime NOT NULL COMMENT '数据新增时间',
  `creator` varchar(128) NOT NULL DEFAULT '0' COMMENT '创建者',
  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据修改时间',
  `modifier` varchar(128) NOT NULL DEFAULT '0' COMMENT '修改者',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '是否逻辑删除,默认为n',
  `role_id` bigint(20) DEFAULT NULL COMMENT '角色ID',
  `org_id` bigint(20) DEFAULT NULL COMMENT '组织ID',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户ID',
  `home_page_url` varchar(500) DEFAULT NULL COMMENT '主页URL',
  `access_org_path` varchar(256) DEFAULT NULL COMMENT '授权组织路径',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18658 DEFAULT CHARSET=utf8 COMMENT='系统用户组织角色';
</code>
登入後複製

存一个全局常量标识用户,并分用户组分配不同的功能,具体可以看一下one think的思路one think

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 Dec 09, 2024 am 11:42 AM

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

您如何在PHP中解析和處理HTML/XML?

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

突破或從Java 8流返回?

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

php程序在字符串中計數元音

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

Java程序查找膠囊的體積

如何在Spring Tool Suite中運行第一個春季啟動應用程序? 如何在Spring Tool Suite中運行第一個春季啟動應用程序? Feb 07, 2025 pm 12:11 PM

如何在Spring Tool Suite中運行第一個春季啟動應用程序?

See all articles