simplejf


开发示例

<p>上一章大致了解了整体权限系统如何设计的。本章通过代码展示如何实现。</p> <h5>表结构设计</h5> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/f81fe55ef2697ad09dff6e105f452bad?showdoc=.jpg" alt="" /></p> <pre><code class="language-sql">t_pdc_user 用户表 t_pdc_role 角色表 t_pdc_resource 资源表 t_pdc_role_resource 角色资源表</code></pre> <p>其中 <code>角色资源表</code>的设计如下</p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/06c93698a75843b54b0db0405203fdb7?showdoc=.jpg" alt="" /> 主体思想为:为某个角色分配了某个资源,可以操作该资源的哪些权限。</p> <h5>操作标识符</h5> <p>&emsp;在用户登录的后,已经将该用户拥有系统中所有 操作标识符 存储在 session中。通过后续指令或者拦截器来提取。</p> <h5>用户管理举例</h5> <ul> <li>服务端实现</li> </ul> <pre><code class="language-java">@ControllerBind(controllerKey = "/user", viewPath = "/pdc") @AuthAnno(type = AuthType.Super, res = "user") public class UserController extends BaseController { @AuthAnno(auth="look") @LogAnno(desc = "查看用户列表", type = LogType.SEARCH) public void index() throws Exception{ render("user_list.html"); } @AuthAnno(auth="save") public void add() throws Exception{ setAttr("roles", Role.dao.findNormalRoles()); render("user_form.html"); } }</code></pre> <pre><code>res 表示 资源标识 auth 表示 权限(关键字)</code></pre> <p>上面代码的意思为:只有当该用户拥有操作符 为 <code>user_look</code>,<code>user_save</code>的时候才可以进入业务方法操作。</p> <ul> <li>WEB端实现</li> </ul> <p>1.在WEB端通过自定义权限判断指令来实现 是否拥有操作符 的判断</p> <pre><code class="language-html">/**判断是否有某个权限关键字,如果存在关键字则执行body内容,否则不执行。通常用做在HTML页面中判断按钮是否有权限,用于显示*/ #auth_has("user_save") &lt;a class="btn btn-info btn-xs no-border"&gt; &lt;i class="fa fa-plus"&gt;&lt;/i&gt; 添加 &lt;/a&gt; #end</code></pre> <p>上面的代码意思为:只有当该用户拥有操作符为 <code>user_save</code> 的时候才会拥有添加按钮出现。</p> <p>2.通过js来为动态数据提供 是否拥有操作符 的判断</p> <pre><code class="language-html">#define js() &lt;script&gt; /**参数可以是多个,返回结果格式为 {"user_save":true,"user_delete":false},其中TRUE表示有权限,FALSE表示无权限 */ var auths = #auth_json("user_save","user_delete"); if(auths['user_save']){ alert("拥有某个js动态按钮权限"); } &lt;/script&gt; #end</code></pre> <p>上面代码意思为:通过js动态判断是否拥有 <code>user_save</code>的权限标识符。</p> <p>3.判断拥有哪个角色和是否是超级管理员权限</p> <pre><code class="language-html">/**判断是否是超级管理员*/ #is_admin &lt;a class="btn btn-info btn-xs no-border"&gt; &lt;i class="fa fa-plus"&gt;&lt;/i&gt; 添加 &lt;/a&gt; #end /**判断是否是有某个角色标识,目前系统中已有的角色标识包括:{"1":"超级管理员","10":"管理","20":"普通"}*/ #role_has(10) &lt;a class="btn btn-info btn-xs no-border"&gt; &lt;i class="fa fa-plus"&gt;&lt;/i&gt; 添加 &lt;/a&gt; #end</code></pre>

页面列表

ITEM_HTML