PlayFramework 完整实现一个APP(十一)
添加权限控制
1.导入Secure module,该模块提供了一个controllers.Secure控制器。
/conf/application.conf
# Import the secure module
module.secure=${play.path}/modules/secure
/conf/routes
# Import Secure routes
* / module:secure
2.在Post Comment User Tag控制器上添加标签
@With(Secure.class)public class Posts extends CRUD {
}
启动Server,访问 localhost:9000/admin,如果页面报错(或编译失败),参考上一章添加CRUD模块
3.添加权限控制
创建权限控制器 /controllers/Security.java
import models.*;public class Security extends Secure.Security { static boolean authenticate(String username, String password) { return User.connect(username, password) != null;
}
}
通过 localhost:9000/logout 退出登录,使用正确的用户名密码进行登录
4.添加登录页面
创建Admin Controller
@With(Secure.class)public class Admin extends Controller {
@Before static void setConnectedUser() { if(Security.isConnected()) {
User user = User.find("byEmail", Security.connected()).first();
renderArgs.put("user", user.fullname);
}
}
public static void index() {
render();
}
}
添加路由
# Administration
GET /admin/? Admin.index
* /admin module:crud
修改main.html
<ul id="tools">
<li>
<a href="@{Admin.index()}">Log in to write something</a>
</li>
</ul>
添加/views/admin.html
<!DOCTYPE html>
<html>
<head>
<title>Administration</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
#{get ‘moreStyles‘ /}
<link rel="stylesheet" type="text/css" media="screen"
href="@{‘/public/stylesheets/main.css‘}" />
<link rel="shortcut icon" type="image/png"
href="@{‘/public/images/favicon.png‘}" />
<script src="@{‘/public/javascripts/jquery-1.4.2.min.js‘}"></script>
<script src="@{‘/public/javascripts/jquery.tools-1.2.5.toolbox.expose.min.js‘}"></script>
</head>
<body id="admin">
<div id="header">
<div id="logo">
yabe. <span>administration</span>
</div>
<ul id="tools">
<li>
<a href="@{Secure.logout()}">Log out</a>
</li>
</ul>
</div>
<div id="main">
#{doLayout /}
</div>
<p id="footer">
Yabe is a (not so) powerful blog engine built with the
<a href="http://www.playframework.org">Play framework</a>
as a tutorial application.
</p>
</body>
</html>
添加/views/Admin/index.html
#{extends ‘admin.html‘ /}
Welcome ${user}!
5.添加角色
Security控制器重写check方法
static boolean check(String profile) { if("admin".equals(profile)) { return User.find("byEmail", connected()).<User>first().isAdmin;
} return false;
}
修改admin.html,显示用户是否有admin角色
<div id="main">
<ul id="adminMenu">
<li class="${request.controller == ‘Admin‘ ? ‘selected‘ : ‘‘}">
<a href="@{Admin.index()}">My posts</a>
</li>
#{secure.check ‘admin‘}
<li class="${request.controller == ‘Posts‘ ? ‘selected‘ : ‘‘}">
<a href="@{Posts.list()}">Posts</a>
</li>
<li class="${request.controller == ‘Tags‘ ? ‘selected‘ : ‘‘}">
<a href="@{Tags.list()}">Tags</a>
</li>
<li class="${request.controller == ‘Comments‘ ? ‘selected‘ : ‘‘}">
<a href="@{Comments.list()}">Comments</a>
</li>
<li class="${request.controller == ‘Users‘ ? ‘selected‘ : ‘‘}">
<a href="@{Users.list()}">Users</a>
</li>
#{/secure.check}
</ul>
#{doLayout /}
</div>
在Post、Tag、User、Comment控制器上添加标签,只有admin role的User才能访问 http://localhost:9000/admin/{####}
@Check("admin")@With(Secure.class)public class Posts extends CRUD {
}
以上就是PlayFramework 完整实现一个APP(十一)的内容,更多相关内容请关注PHP中文网(www.php.cn)!
推荐阅读
-
Android 启动另一个App/apk中的Activity实现代码
-
python实现对一个完整url进行分割的方法
-
Java实现一个顺序表的完整代码
-
实现一个完整的Node.js RESTful API的示例
-
入门级带你实现一个安卓智能家居APP
-
利用Python函数实现一个万历表完整示例
-
iOS开发之常用资讯类App的分类展示与编辑的完整案例实现(Swift版)
-
从一个点子到一个社区APP,是如何通过.NET实现的?——“文林物业系统”APP介绍及采访记录
-
Android 启动另一个App/apk中的Activity实现代码
-
[Android App]IFCTT,即:If Copy Then That,一个基于IFTTT的"This"实现