+ -
当前位置:首页 → 问答吧 → Catalyst 问题

Catalyst 问题

时间:2011-01-10

来源:互联网

本帖最后由 Perl_Er 于 2011-01-10 17:24 编辑

The Definitive Guide  to Catalyst这本书里面有个例子(authentication and  authorization着一章),
对于权限管理,它只创建了下面几个表
  1. BEGIN TRANSACTION;
  2.     CREATE TABLE users (
  3.       id INTEGER PRIMARY KEY,
  4.       username char(32) NOT NULL DEFAULT '',
  5.       password char(64) NOT NULL,
  6.       status char(16) NOT NULL DEFAULT 'active',
  7.       last_whisper char(20)
  8.     );
  9.     INSERT INTO "users" VALUES(1,'friend','foDCGe8hfTtg.',
  10.                                  'active', NULL);
  11.     INSERT INTO "users" VALUES(2,'neighbor','baxXrXtQl0c6Y',
  12.                                  'active', NULL);
  13.     CREATE TABLE users_to_roles (
  14.       user int(11) NOT NULL,
  15.       role int(11) NOT NULL,
  16.       PRIMARY KEY (user,role),
  17.       FOREIGN KEY(user) REFERENCES users(id),
  18.       FOREIGN KEY(role) REFERENCES roles(id)
  19.     );
  20.     INSERT INTO "users_to_roles" VALUES(1,1);
  21. CREATE TABLE roles (
  22.     id INTEGER PRIMARY KEY,
  23.     role char(32) DEFAULT NULL);
  24.     INSERT INTO "roles" VALUES(1,'can_whisper');
  25. CREATE TABLE ideas (
  26.       id INTEGER PRIMARY KEY,
  27.       text text NOT NULL,
  28.       secret char(3) NOT NULL DEFAULT 'no',
  29.       added char(20) NOT NULL DEFAULT 'unknown',
  30.       added_by char(32) NOT NULL DEFAULT 'unknown'
  31.     );
  32.     INSERT INTO "ideas" VALUES(1,'I like food','no',
  33.            'Sun Apr 19 09:19:04 2009','SneakyCat');
  34.     INSERT INTO "ideas" VALUES(2,'I only eat salmon.','no',
  35.            'Sun Apr 19 10:55:53 2009','friend');
  36.     INSERT INTO "ideas" VALUES(3,'I like milk too.','yes',
  37.            'Sun Apr 19 10:56:02 2009', 'SneakyCat');
  38.     INSERT INTO "ideas" VALUES(4,'I hear a twitter.','no',
  39.            'Sun Apr 19 11:26:08 2009', 'SneakyCat');
  40.     INSERT INTO "ideas" VALUES(5,'I think I will eat it.','yes',
  41.            'Sun Apr 19 11:26:20 2009', 'SneakyCat');
  42.     COMMIT;
复制代码
下面代码里面只是检查role,那怎么细化到单个的permission了。因为一个role是对于多个permission的。有模块来做这个吗?
  1. sub whisper :Local :Args(0) {
  2.     my ( $self, $c ) = @_;
  3.     if ($c->user_exists() && $c->check_user_roles( qw/ can_whisper /) ) {
  4.         ## do whispery things
  5.         my $current_time = scalar localtime();
  6.         if (exists($c->req->params->{'whisper'}) &&  
  7.           length($c->req->params->{'whisper'}) > 1) {
复制代码

作者: Perl_Er   发布时间: 2011-01-10

我理解 Catalyst 中的 role 的概念就是对应系统中的某个操作( 如 查看,添加,删除,编辑等等),不知道是不是你说的 permission, 不知你要如何再细化

作者: socyno   发布时间: 2011-01-10

本帖最后由 Perl_Er 于 2011-01-10 21:46 编辑

谢谢!我也是这么理解。但我觉得那不是真正的Role啊。role应该是permission的集合啊。应该还有一个Permission的表与Role表关联吧…但是在Catalyst里怎实现?

作者: Perl_Er   发布时间: 2011-01-10

热门下载

更多