---
title: "Behörighetsnivåer"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/109459-behörighetsnivåer"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "AG"
published: "2004-08-17T17:23:27.000Z"
updated: "2004-08-18T22:48:27.000Z"
replies: 7
views: 405
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/109459-behörighetsnivåer"
---

# Behörighetsnivåer

## #1 — AG, 2004-08-17T17:23Z

Tänkte bygga upp ett adminsystem där olika användare har olika behörigheter.
Tänkte man kunde bygga upp detta med en sträng ex, 1010 där 1 = behörighet och 0 = ej behörighet. Där skulle man sedan kunna använda substring för att få ut vad en användare har behörighet till.

Dock fick jag detta svar på ett annat forum:

> I've done similar things in the past when I needed a custom role-based authentication module. However, instead of substrings you should store the values as ints and use binary logic.
> 
> Each role key is represented by a bit:
> watch = 1, modify = 2, delete = 4, create = 8.
> 
> And each user has a key defining their permissions:
> int userKey = 6; // (0110 - modify & delete)
> 
> Now the following applies:
> (roleKey \| roleKey) combines permissions
> (userKey & roleKey) checks permissions
> (userKey \| roleKey) adds permissions
> (userKey & !roleKey) deletes permissions
> 
> \--Jon

Dock fattar jag inte riktigt vad denna Jon menar.

Någon som förklara?

tack
Andreas

Permalänk: https://www.webforum.nu/p/109459

## #2 — PeW, 2004-08-17T18:53Z

6 är detsamma som 0110, binärt sett. Om man tar exempelvis 6 AND 1 (0001) så får man 0000 som resultat. Medans 6 OR 1 blir 7 (0111) som resultat. Så 2 & 4 =\> 0010 & 0100 = 0000, vilket då kan sättas in som 6 - (2 & 4) = 6 =\> 6 - 0 = 6. Bör väl då innebära att man sen kan kolla om userKey stämmer med roleKey genom att köra AND.

Permalänk: https://www.webforum.nu/p/1412484

## #3 — Phorpher, 2004-08-17T18:59Z

Om du hållit på med t.ex. chmod i Unix så borde du veta vad det handlar om.

De fyra olika behörigheterna som jon visar har värdena 1, 2, 4 och 8. Ser du ett mönster?

READ: 1 är binärt 0001
MODIFY: 2 är binärt 0010
DELETE: 4 är binärt 0100
CREATE: 8 är binärt 1000

Om du vill att en användare ska få behörighet att läsa och ändra använder du den logiska OR-operatorn:

```php
int userPermission = READ | MODIFY;
```

userPermission får värdet av READ och MODIFY kombinerat vilket är 3:

0001 \| 0010 = 0011 = 3

För att kolla om en användare har rättigheten MODIFY:

```php
if(userPermission & MODIFY)
...
```

0011 & 0010 = 0010 = 2 = MODIFY! Användaren får ändra.

Kanske ger dig en hint om hur det fungerar.  :i

Permalänk: https://www.webforum.nu/p/1412486

## #4 — spango, 2004-08-17T22:56Z

Re: Behörighetsnivåer

> **Jon skrev:**
>
> (userKey & !roleKey) deletes permissions

Man ska inte använda ! när man arbetar med bitar, man ska använda bitvis komplement, \~. Alltså, om du har en variabel *perms* och vill ta bort rättigheten att ändra, skriver du:

```
perms = perms & ~MODIFY;
// eller kortare...
perms &= ~MODIFY;
```

Permalänk: https://www.webforum.nu/p/1412649

## #5 — spango, 2004-08-17T22:58Z

> **Phorpher skrev:**
>
> För att kolla om en användare har rättigheten MODIFY:
>
>
> ```php
> if(userPermission & MODIFY)
> ...
> ```
>
> 
> 
> 0011 & 0010 = 0010 = 2 = MODIFY! Användaren får ändra.

Fast eftersom det är Java måste man skriva

```
if ((userPermission & MODIFY) == MODIFY)
```

eftersom man inte kan använda en int (eller long eller bla bla bla) som villkor :)

Permalänk: https://www.webforum.nu/p/1412651

## #6 — Phorpher, 2004-08-18T17:46Z

> **spango skrev:**
>
> > **Phorpher skrev:**
> >
> > För att kolla om en användare har rättigheten MODIFY:
> >
> >
> > ```php
> > if(userPermission & MODIFY)
> > ...
> > ```
> >
> > 
> > 
> > 0011 & 0010 = 0010 = 2 = MODIFY! Användaren får ändra.
>
> 
> Fast eftersom det är Java måste man skriva
>
>
> ```
> if ((userPermission & MODIFY) == MODIFY)
> ```
>
> 
> eftersom man inte kan använda en int (eller long eller bla bla bla) som villkor :)

Det är helt korrekt! Jag satt faktiskt och funderade på hur det var jag gjorde i Java sist men kom inte ihåg.  :bire 

För övrigt är det här ett riktigt, riktigt snyggt sätt att hantera flaggor på enligt mig.

Permalänk: https://www.webforum.nu/p/1415960

## #7 — AG, 2004-08-18T21:30Z

Är detta ett enkelt och bra sätt att sedan utöka med mer och mer sidor, eller begränsar man sig något?

Andreas

Permalänk: https://www.webforum.nu/p/1416160

## #8 — spango, 2004-08-18T22:48Z

Den enda begränsningen är antalet bitar. I en int har du 32, i en long 64, så om du tänker ha fler än 64 olika roller borde du tänka om, men jag skulle kanske misstänka att det inte behövs :)

Permalänk: https://www.webforum.nu/p/1416210

---

Tråden på webben: https://www.webforum.nu/amne/java/109459-behörighetsnivåer
