[Joomla 2.5] จัดการสิทธิ์ของผู้ใช้ด้วย ACL

แชร์ ความรู้ในการ พัฒนา Joomla Component Extension Module Plugin

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 10562
Joined: 18/04/2012 9:39 am

[Joomla 2.5] จัดการสิทธิ์ของผู้ใช้ด้วย ACL

Post by tsukasaz » 08/05/2013 4:11 pm

Access Control List (ACL)

การทำงานจะใช้ไฟล์ access.xml เพื่อสร้างรายการสำหรับควบคุมการทำงาน เช่น add edit delete ของผู้ใช้แต่ละคน และใช้ไฟล์ config.xml สำหรับสร้างการแสดงผลของหน้าตั้งค่าสิทธิ์

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<!-- ไฟล์ access.xml -->
<access component="com_users">
	<section name="component">
		<action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
		<action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" />
		<action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" />
		<action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" />
		<action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" />
	</section>
</access>

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<!-- ไฟล์ config.xml -->
<config>
	<fieldset
		name="permissions"
		label="JCONFIG_PERMISSIONS_LABEL"
		description="JCONFIG_PERMISSIONS_DESC"
		>
		<field
			name="rules"
			type="rules"
			label="JCONFIG_PERMISSIONS_LABEL"
			filter="rules"
			validate="rules"
			component="com_users"
			section="component" />
	</fieldset>
</config>
ซึ่งเมื่อตั้งค่าสิทธิ์ต่างๆ แล้ว มันจะนำไปเก็บไว้ในตาราง #__assets ฟิล์ด rules โดยจะอยู่ในรูปแบบ JSON encode
"core.create":{"7":1}
core.create เป็นชื่อการกระทำใน Component นั้น
7 มาจาก group_id
1 มาจากการตั้งค่าสิทธิ์ true กับ false

Code: Select all

{"core.login.site":{"6":1},
"core.login.admin":{"7":1,"6":1,"4":1,"5":1,"22":1},
"core.login.offline":{"7":1},
"core.admin":{"8":1,"7":1},
"core.manage":{"7":1},
"core.create":{"7":1},
"core.delete":{"7":1},
"core.edit":{"7":1},
"core.edit.state":{"7":1},
"core.edit.own":{"7":1}}
สำหรับการ Check Access สามารถสร้าง function ใน Helper โดยใส่ Code ตามด้านล่าง (คืนค่าเป็น true กับ false)

Code: Select all

public static function getActions()
{
    if (empty(self::$actions))
    {
        $user = JFactory::getUser();
        self::$actions = new JObject;

        $actions = JAccess::getActions('com_users');

        foreach ($actions as $action)
        {
            self::$actions->set($action->name, $user->authorise($action->name, 'com_users'));
        }
    }

    return self::$actions;
} 
หรือ

Code: Select all

function checkAccess($action) {
        $user = JFactory::getUser();
        return $user->authorise($action, 'com_rrisk');
}
 
ค่า $action ที่ใส่เข้ามาจะเป็น core.create core.edit core.delete
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

Return to “Joomla Developing Knowledge”

Users browsing this forum: No registered users and 1 guest