日期:2014-05-16 浏览次数:20407 次
dbo.users = function(){  
    var users = panda.db.get("users");  
    return {  
        list: function() {  
            if (!users.count()) { init(); }  
            return users.list().$sort({ name: 1 });  
        },  
        add: function(user) {  
            users.insert(user);  
            return this.list();  
        },  
        update: function(user) {  
            var q = { name: user.name };  
            users.update(q, user, true, false);  
            return this.list();  
        },  
        remove: function(name) {  
            users.remove({ name: name });  
            return this.list();  
        }  
    };  
    function init() {  
        panda.db.eval(function(){  
            var users = db.users;  
            users.drop();  
            users.ensureIndex({ name: 1 }, { unique: true }); 
  
            users.insert({ name: "user1", desc: "desc1" });  
            users.insert({ name: "user2", desc: "desc2" });  
            users.insert({ name: "user3", desc: "desc3" });  
        });  
    }  
}();var views = {};  
  
views.index = function($, users) {  
    var content = $("#content-tmpl").tmpl(),  
        rows = $("#user-tmpl").tmpl(users);  
      
    $("#content").html(content);  
    $("#content tr:first").after(rows);  
    $("#error").hide();  
};(function() {  
    var log = panda.log("proxy.security");  
  
    proxy.security = { priority: 80 };  
  
    // 对 page.* 的调用进行权限控制  
    proxy.security.page = {  
        priority: 100,  
        expr: /^page./,  
        func: function(name, method, args) {  
            // 获取方法的第二个参数,即 req  
            var req = args[1];  
  
            // 读取 session 中的role。返回值是 java.lang.String  
            // 加上空字符串转为 JavaScript 中的 String  
            var role = req.session.getAttribute("user.role") + "";  
  
            // 如果角色是 "admin",则显示相应页面  
            // 否则,显示登录页面  
            if (role === "admin") {  
                return this[method].apply(this, args);  
            } else {  
                log.info("Redirect to login page.");  
                return panda.render("login");  
            }  
        }  
    }  
  
    // 利用类似的方法对 api.* 的调用进行权限控制,略  
    proxy.security.api = { ... }  
}()); page.index = function(params, req, res) {  
    return panda.render("index", function($){  
        views.index($, dbo.users.list());  
    });  
};$(function(){
	bind();
	// 其他代码,略
	// 每次修改数据时重新渲染页面、绑定事件    
	function show(users) {  
		views.index($, users);        
		bind();  
	}	
});