Play Framework 完整实现一个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 {
}

。。

时间: 2024-10-10 09:42:33

Play Framework 完整实现一个APP(十一)的相关文章

Play Framework 完整实现一个APP(二)

1.开发DataModel 在app\moders 下新建User.java package models; import java.util.*; import javax.persistence.*; import play.db.jpa.*; @Entity public class User extends Model { public String email; public String password; public String fullname; public String

Play Framework 完整实现一个APP(十四)

添加测试 ApplicationTest.java @Test public void testAdminSecurity() { Response response = GET("/admin"); assertStatus(302, response); assertHeaderEquals("Location", "http://localhost/login", response); } 更多测试介绍 http://play-framew

Play Framework 完整实现一个APP(十三)

添加用户编辑区 1.修改Admin.index() public static void index() { List<Post> posts = Post.find("author.email", Security.connected()).fetch(); render(posts); } 2.修改页面 app/views/Admin/index.html #{extends 'admin.html' /} <h3>Welcome ${user}, <

Play Framework 完整实现一个APP(九)

添加增删改查操作 1.开启CRUD Module 在/conf/application.conf 中添加 # Import the crud module module.crud=${play.path}/modules/crud 在/conf/routes 中添加 # Import CRUD routes * /admin module:crud 需要重启Server,导入CRUD Module 2.添加控制器 /app/controllers import play.*; import pl

Play Framework 完整实现一个APP(八)

创建Tag标签 1.创建Model @Entity @Table(name = "blog_tag") public class Tag extends Model implements Comparable<Tag> { public String name; private Tag(String name) { this.name = name; } public String toString() { return name; } public int compare

一个App项目设计开发完整流程

作为一个PHP程序猿想转行APP开发可不是件容易的事情,话说隔行如隔山,这隔着一层语言也是多东西需要学习啊,一直对APP开发很感兴趣,最近请教了几个做移动开发的朋友,看了很多的资料,决定把自己学到的东西总结一下分享给和我一样刚做开发的菜鸟们. 1. idea形成——APP项目雏形 一个APP项目的最初首先要确定项目整体方案,整个项目的规划,大体框架,做成文档展现出来,以便大家提意见和更好的改进.也就是说首先要确立产品原型,进入项目评估阶段.经过反复确认,最终形成产品脑图和完整的需求文档. 2.功

论一个APP从启动到主页面显示经历的过程?

前言 (个人观点.不喜勿喷) 本部分内容是关于Android进阶的一些知识总结,涉及到的知识点比较杂,不过都 是面试中几乎常问的知识点,也是加分的点. 关于这部分内容,可能需要有一些具体的项目实践.在面试的过程中,结合具体自 身实践经历,才能更加深入透彻的描绘出来. (顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找)https://github.com/xiangjiana/Android-MS 一.流程概述 启动流程: ① 点击桌面App图标,Launcher进程采用Binde

如何使用viewpager与fragment写一个app导航activity

今天我们来看一下如何使用viewpager和fragment组合来写一个app导航activity,这里使用到了android开源控件viewpagerindicator,有兴趣的同学可以去它网站上看看它的介绍. 附上效果截图一张: demo中只有一个activity,是用activity_main.xml来布局,其内容如下: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:and

学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder

1 创建并运行第一个App 1.1 问题 使用Xcode创建一个App项目,该应用实现功能在界面上显示Hello World标签,在模拟器中的运行结果如图-1所示: 图-1 1.2 方案 分析图-1,首先使用Xcode创建一个Single ViewApplicaton应用,起名为MyFirstApp,如图-2所示: 图-2 然后删除Xcode的导航栏里只保留TRAppDelegate.h文件和TRAppDelageat.m文件,其他代码文件.storyboard文件以及xib文件删除,如图-3所